package modelo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class Evento {

	// Atributos
	private String codigo;
	private String tipoEvento;
	private String direccion;
	private String fecha;
	private String hora;
	private ArrayList<Anfitrion> anfitriones;
	private ArrayList<Persona> agasajados; 
	private ArrayList<Invitado> invitados;
	private ArrayList<Obsequio> regalos;
	private ListaObsequio listaobsequio;
	
	public Evento(){
		super();
		this.invitados = new ArrayList<Invitado>();
		this.anfitriones = new ArrayList<Anfitrion>();
		this.agasajados = new ArrayList<Persona>();
		this.listaobsequio = new ListaObsequio();
		this.regalos = new ArrayList();
	}
	
	public Evento(String codigo, String tipoEvento, String direccion,
			String fecha, String hora) {
		super();
		this.codigo = codigo;
		this.tipoEvento = tipoEvento;
		this.direccion = direccion;
		this.fecha = fecha;
		this.hora = hora;
//		this.anfitriones = anfitriones;
//		this.agasajados = agasajados;
//		this.invitados = invitados;
//		this.regalos = regalos;
//		this.listaobsequio = listaObsequio;
	}
	
	public String getTipoEvento() {
		return tipoEvento;
	}
	
	public void setTipoEvento(String tipoEvento) {
		this.tipoEvento = tipoEvento;
	}
	
	public String getDireccion() {
		return direccion;
	}
	
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	
	public ArrayList<Anfitrion> getAnfitriones() {
		if (this.cantAnfitriones() > 0) {
			return this.anfitriones;
		} 
			return null;
	}
	
	public void setAnfitriones(ArrayList<Anfitrion> anfitriones) {
		this.anfitriones = anfitriones;
	}
	
	public ArrayList<Persona> getAgasajados() {
		if (this.cantAgasajados() > 0) {
			return this.agasajados;
		} 
			return null;
	}
	
	public void setAgasajados(ArrayList<Persona> agasajados) {
		this.agasajados = agasajados;
	}
	
	public ArrayList<Invitado> getInvitados() {
		if (this.cantInvitados() > 0) {
			return this.invitados;
		} 
		return null;
	}
	
	public void setInvitados(ArrayList<Invitado> invitados) {
		this.invitados = invitados;
	}
	
	public ListaObsequio getListaobsequio() {
		return listaobsequio;
	}

	public void setListaobsequio(ListaObsequio listaobsequio) {
		this.listaobsequio = listaobsequio;
	}
	
	public String getFecha() {
		return fecha;
	}
	
	public void setFecha(String fecha) {
		this.fecha = fecha;
	}
	
	public String getHora() {
		return hora;
	}
	
	public void setHora(String hora) {
		this.hora = hora;
	}
	
	public String getCodigo() {
		return codigo;
	}
	
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	
	public void agregarAnfitriones(Anfitrion anfitrion){
		 this.anfitriones.add(anfitrion);
	}
	
	public int cantAnfitriones(){
		return this.anfitriones.size();
	}
	
	public void agregarAgasajados(Persona agasajado){
		 this.agasajados.add(agasajado);
	}
	
	public int cantAgasajados(){
		return this.agasajados.size();
	}
	
	public void agregarInvitados(Invitado invitado){
		 this.invitados.add(invitado);
	}
	
	public int cantInvitados(){
		return this.invitados.size();
	}
	
	public void AgregarObsequio(Producto producto) {
		
		this.listaobsequio.AgregarObsequio(producto);

	}

	public int buscarInvitado(String ced) {
		for(int i=0; i<cantInvitados(); i++){
            if (invitados.get(i).getCedula().equalsIgnoreCase(ced)){
            	return i;
            }
		}
    return -1;
	}
	
	public ArrayList<Invitado> nroInvitadoRegalos(){
		
		ArrayList<Invitado> miInvitado = new ArrayList();
		
		for (int i = 0; i < cantInvitados(); i++){
			
			if (this.invitados.get(i).cantObsequios() > 0 ){
				
				miInvitado.add(invitados.get(i));
			}
		}
		
		return miInvitado;
	}
	
	public int nroRegalos(){
		
		int numRegalos =0;
		
		for (int i = 0; i < cantInvitados(); i++){
			
			if (this.invitados.get(i).cantObsequios() > 0 ){
				
				numRegalos +=  this.invitados.get(i).cantObsequios();
			
			}
		}
		return numRegalos;
	}

	public void registrarObsequioInvitado(String ced, Producto producto) {
		this.getInvitados().get(buscarInvitado(ced)).agregarObsequio(producto);
	}
	
	public ArrayList<Obsequio> getRegalos() {
		return regalos;
	}

	public void setRegalos(ArrayList<Obsequio> regalos) {
		this.regalos = regalos;
	}

	public void AgregarRegalos(Obsequio obsequio) {
		
		this.regalos.add(obsequio);

	}
	
	public int cantRegalos(){
		return this.regalos.size();
	}
	
	
	public ArrayList<Producto> listaSinOsequio(){
		
		ArrayList<Producto> prod = new ArrayList();
		String codigo;

     if (cantRegalos() > 0){	
				
		int aux =0;
		
		for(int i=0; i< this.listaobsequio.cantListaObsequios(); i++){
		
			codigo = this.listaobsequio.getListaObsequios().get(i).getCodigo();
			int cont = 0;
			for (int j=0; j< cantRegalos(); j++){
				
				if(!(this.regalos.get(j).getCodigo().equalsIgnoreCase(codigo))){
					cont++;
				} else {
		
					aux++;
				}	
			}
			
			if ( cont == cantRegalos() || aux > cantRegalos()) {
				prod.add(this.listaobsequio.getListaObsequios().get(i));
			}
		}
		
	} else {
		
		for(int i=0; i<this.listaobsequio.cantListaObsequios(); i++){
			prod.add(this.listaobsequio.getListaObsequios().get(i));
		}
		return prod;
	}
	
	return prod;
		
	} 

	
	

}